package com.ias.log.example;

import com.ias.common.result.Result;
import com.ias.log.annotation.LogAnnotation;
import org.springframework.web.bind.annotation.*;

/**
 * 日志注解使用示例
 * 此类仅作为示例，实际使用时可删除
 * 
 * @author ias
 * @since 2024
 */
@RestController
@RequestMapping("/example")
public class LogUsageExample {

    /**
     * 示例1: 新增操作
     * 记录请求参数和响应数据
     */
    @LogAnnotation(
        module = "示例模块",
        remark = "新增数据",
        optType = 1,  // 1-新增
        recordRequestParam = true,
        recordResponseDate = true
    )
    @PostMapping("/add")
    public Result<String> add(@RequestBody String data) {
        // 业务逻辑
        return Result.success("添加成功");
    }

    /**
     * 示例2: 修改操作
     * 仅记录请求参数
     */
    @LogAnnotation(
        module = "示例模块",
        remark = "修改数据",
        optType = 2,  // 2-修改
        recordRequestParam = true,
        recordResponseDate = false
    )
    @PutMapping("/update/{id}")
    public Result<Void> update(@PathVariable String id, @RequestBody String data) {
        // 业务逻辑
        return Result.success();
    }

    /**
     * 示例3: 删除操作
     * 不记录参数和响应
     */
    @LogAnnotation(
        module = "示例模块",
        remark = "删除数据",
        optType = 3,  // 3-删除
        recordRequestParam = false,
        recordResponseDate = false
    )
    @DeleteMapping("/delete/{id}")
    public Result<Void> delete(@PathVariable String id) {
        // 业务逻辑
        return Result.success();
    }

    /**
     * 示例4: 查询操作
     * 通常查询不记录日志，但特殊情况可以记录
     */
    @LogAnnotation(
        module = "示例模块",
        remark = "查询数据",
        optType = 4,  // 4-查询
        isSave = false  // 查询操作可以不保存到数据库
    )
    @GetMapping("/query/{id}")
    public Result<String> query(@PathVariable String id) {
        // 业务逻辑
        return Result.success("查询结果");
    }

    /**
     * 示例5: 导出操作
     */
    @LogAnnotation(
        module = "示例模块",
        remark = "导出数据",
        optType = 5,  // 5-导出
        recordRequestParam = true,
        recordResponseDate = true
    )
    @GetMapping("/export")
    public Result<String> export() {
        // 导出逻辑
        return Result.success("导出成功");
    }

    /**
     * 示例6: 导入操作
     */
    @LogAnnotation(
        module = "示例模块",
        remark = "导入数据",
        optType = 6,  // 6-导入
        recordRequestParam = true,
        recordResponseDate = true
    )
    @PostMapping("/import")
    public Result<String> importData() {
        // 导入逻辑
        return Result.success("导入成功");
    }

    /**
     * 示例7: 登录操作
     * 注意：登录操作不要记录密码等敏感信息
     */
    @LogAnnotation(
        module = "认证模块",
        remark = "用户登录",
        optType = 7,  // 7-登录
        recordRequestParam = false,  // 不记录请求参数（包含密码）
        recordResponseDate = false
    )
    @PostMapping("/login")
    public Result<String> login(@RequestBody String credentials) {
        // 登录逻辑
        return Result.success("登录成功");
    }

    /**
     * 示例8: 登出操作
     */
    @LogAnnotation(
        module = "认证模块",
        remark = "用户登出",
        optType = 8,  // 8-登出
        recordRequestParam = false,
        recordResponseDate = false
    )
    @PostMapping("/logout")
    public Result<Void> logout() {
        // 登出逻辑
        return Result.success();
    }

    /**
     * 示例9: 其他操作
     */
    @LogAnnotation(
        module = "示例模块",
        remark = "执行特殊操作",
        optType = 9,  // 9-其他
        recordRequestParam = true
    )
    @PostMapping("/custom")
    public Result<String> customOperation() {
        // 自定义逻辑
        return Result.success("操作成功");
    }
}

